package everyday;

/**
 * @author zhangmin
 * @create 2022-04-25 11:29
 * 45. 跳跃游戏 II
 * 给你一个非负整数数组 nums ，你最初位于数组的第一个位置。
 *
 * 数组中的每个元素代表你在该位置可以跳跃的最大长度。
 *
 * 你的目标是使用最少的跳跃次数到达数组的最后一个位置。
 *
 * 假设你总是可以到达数组的最后一个位置。
 *
 * 思路：贪心
 * 记录在当前的位置最远能跳到的位置，然后在能跳到的范围内记录下一步最远能到的位置，直到到达最后一个位置
 */
public class jump45 {
    public int jump(int[] nums) {
        int n=nums.length;
        int fastest=0,end=0,jumps=0;
        for (int i = 0; i < n-1; i++) {
            fastest=Math.max(i+nums[i],fastest);
            if (i==end){
                jumps++;
                end=fastest;
            }
        }
        return jumps;
    }
}
